import fs from "fs/promises";
import path from "path";
import { fileURLToPath } from "url";
export default async function (app) {
  const __dirname = path.dirname(fileURLToPath(import.meta.url));

  // 从 apis 目录向上两级到达项目根目录，然后进入 uploads 目录
  const uploadDir = path.join(__dirname, "..", "..", "uploads");

  // 创建上传目录（如果不存在）
  try {
    await fs.access(uploadDir);
  } catch {
    await fs.mkdir(uploadDir, { recursive: true });
  }

  // 图片上传接口
  app.post("/image", async (request, reply) => {
    try {
      // 获取上传的文件
      const data = await request.file();

      // 验证文件是否存在
      if (!data) {
        return reply.code(400).send({ error: "未上传图片" });
      }
      // 验证文件类型（仅允许图片）
      const allowedMimeTypes = ["image/jpeg", "image/png", "image/webp"];
      if (!allowedMimeTypes.includes(data.mimetype)) {
        return reply.code(400).send({
          error: "不支持的文件类型，仅允许 jpg、png、webp",
        });
      }
      // 生成唯一文件名（避免覆盖）
      const fileName = `${Date.now()}-${Math.random()
        .toString(36)
        .substring(2, 10)}.${data.filename.split(".").pop()}`;
      const filePath = path.join(uploadDir, fileName);

      // 将文件流保存到磁盘
      try {
        // 使用@fastify/multipart提供的toBuffer方法处理文件
        const buffer = await data.toBuffer();
        await fs.writeFile(filePath, buffer);
      } catch (err) {
        throw err;
      }
      // 返回图片信息
      return {
        success: true,
        data: {
          fileName,
          originalName: data.filename,
          mimetype: data.mimetype,
          url: `/uploads/${fileName}`, // 访问图片的 URL 路径
          size: await fs.stat(filePath).then((stat) => stat.size),
        },
      };
    } catch (error) {
      app.log.error("图片上传失败:", error);
      return reply.code(500).send({ error: "图片上传失败" });
    }
  });
}
